<?php
/* -------------------------------------------------------------------------------------
* 	ID:						$Id: order_rcs.php 11 2013-09-21 11:43:11Z phone.mueller@googlemail.com $
* 	Letzter Stand:			$Revision: 11 $
* 	zuletzt geaendert von:	$Author: siekiera $
* 	Datum:					$Date: 2013-09-21 11:43:11 +0000 (Sat, 21 Sep 2013) $
*
* 	SEO:mercari by Siekiera Media
* 	http://www.seo-mercari.de
*
* 	Copyright (c) since 2011 SEO:mercari
* --------------------------------------------------------------------------------------
* 	based on:
* 	(c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
* 	(c) 2002-2003 osCommerce - www.oscommerce.com
* 	(c) 2003     nextcommerce - www.nextcommerce.org
* 	(c) 2005     xt:Commerce - www.xt-commerce.com
*
* 	Released under the GNU General Public License
* ----------------------------------------------------------------------------------- */

require_once(DIR_FS_INC.'inc.get_tax_description.php');

class order {
	var $info, $totals, $products, $customer, $delivery, $content_type, $db;
	
	function __construct($customer_id) {
		global $price, $db;
		
		$this->info = array();
		$this->totals = array();
		$this->products = array();
		$this->customer = array();
		$this->delivery = array();
		$this->db = $db;
		$this->cart($customer_id);
	}
	
	function cart($customer_id) {
		global $currencies,$price;
		
		$this->content_type = $_SESSION['cart']->get_content_type();
		
		$customer_address = $this->db->db_query("SELECT 
													c.payment_unallowed,
													c.shipping_unallowed,
													c.customers_firstname,
													c.customers_cid, 
													c.customers_gender,
													c.customers_lastname, 
													c.customers_telephone, 
													c.customers_email_address, 
													c.customers_default_address_id, 
													ab.entry_company, 
													ab.entry_street_address, 
													ab.entry_suburb, 
													ab.entry_postcode, 
													ab.entry_city, 
													ab.entry_zone_id, 
													z.zone_name, 
													co.countries_id, 
													co.countries_name, 
													co.countries_iso_code_2, 
													co.countries_iso_code_3, 
													co.address_format_id, 
													ab.entry_state 
												FROM 
													".TABLE_CUSTOMERS." c, 
													".TABLE_ADDRESS_BOOK." ab 
													LEFT JOIN 
														".TABLE_ZONES." z ON (ab.entry_zone_id = z.zone_id) 
													LEFT JOIN 
														".TABLE_COUNTRIES." co ON (ab.entry_country_id = co.countries_id) 
												WHERE 
													c.customers_id = '".$customer_id."' 
												AND 
													ab.customers_id = '".$customer_id."' 
												AND 
													c.customers_default_address_id = ab.address_book_id");
		
		$shipping_address = $this->db->db_query("SELECT 
													ab.entry_firstname, 
													ab.entry_lastname, 
													ab.entry_company, 
													ab.entry_street_address, 
													ab.entry_suburb, 
													ab.entry_postcode, 
													ab.entry_city, 
													ab.entry_zone_id, 
													z.zone_name, 
													ab.entry_country_id, 
													c.countries_id, 
													c.countries_name, 
													c.countries_iso_code_2, 
													c.countries_iso_code_3, 
													c.address_format_id, 
													ab.entry_state 
												FROM 
													".TABLE_ADDRESS_BOOK." ab 
													LEFT JOIN 
														".TABLE_ZONES." z ON (ab.entry_zone_id = z.zone_id) 
													LEFT JOIN 
														".TABLE_COUNTRIES." c on (ab.entry_country_id = c.countries_id) 
												WHERE 
													ab.customers_id = '".$customer_id."' 
												AND 
													ab.address_book_id = '".$customer_address->fields['customers_default_address_id']."'");
		
		$billing_address = $this->db->db_query("SELECT 
													ab.entry_firstname, 
													ab.entry_lastname, 
													ab.entry_company, 
													ab.entry_street_address, 
													ab.entry_suburb, 
													ab.entry_postcode, 
													ab.entry_city, 
													ab.entry_zone_id, 
													z.zone_name, 
													ab.entry_country_id, 
													c.countries_id, 
													c.countries_name, 
													c.countries_iso_code_2, 
													c.countries_iso_code_3, 
													c.address_format_id, 
													ab.entry_state 
												FROM 
													".TABLE_ADDRESS_BOOK." ab 
													LEFT JOIN 
														".TABLE_ZONES." z ON (ab.entry_zone_id = z.zone_id) 
													LEFT JOIN 
														".TABLE_COUNTRIES." c ON (ab.entry_country_id = c.countries_id) 
												WHERE 
													ab.customers_id = '".$customer_id."' 
												AND 
													ab.address_book_id = '".$customer_address->fields['customers_default_address_id']."'");

		$tax_address = $this->db->db_query("SELECT 
												ab.entry_country_id, 
												ab.entry_zone_id 
											FROM 
												".TABLE_ADDRESS_BOOK." ab 
												LEFT JOIN ".TABLE_ZONES." z ON (ab.entry_zone_id = z.zone_id) 
											WHERE 
												ab.customers_id = '".$customer_id."' 
											AND 
												ab.address_book_id = '".$customer_address->fields['customers_default_address_id']."'");

		$this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
							'currency' => DEFAULT_CURRENCY,
							'currency_value' => $price->currencies[$_SESSION['currency']]['value'],
							'payment_method' => $_SESSION['payment'],
							'shipping_method' => $_SESSION['shipping']['title'],
							'shipping_cost' => $_SESSION['shipping']['cost'],
							'comments' => $_SESSION['comments'],
							'shipping_class'=>$_SESSION['shipping']['id'],
							'payment_class' => $_SESSION['payment']);
		
		if (isset($_SESSION['payment']) && is_object($_SESSION['payment'])) {
			$this->info['payment_method'] = $_SESSION['payment']->title;
			$this->info['payment_class'] = $_SESSION['payment']->title;
			if (isset($_SESSION['payment']->order_status) && is_numeric($_SESSION['payment']->order_status) && ($_SESSION['payment']->order_status > 0))
				$this->info['order_status'] = $_SESSION['payment']->order_status;
		}
		
		$this->customer = array('firstname' => $customer_address->fields['customers_firstname'],
								'lastname' => $customer_address->fields['customers_lastname'],
								'csID' => $customer_address->fields['customers_cid'],
								'gender' => $customer_address->fields['customers_gender'],
								'company' => $customer_address->fields['entry_company'],
								'street_address' => $customer_address->fields['entry_street_address'],
								'suburb' => $customer_address->fields['entry_suburb'],
								'city' => $customer_address->fields['entry_city'],
								'postcode' => $customer_address->fields['entry_postcode'],
								'state' => ((not_null($customer_address->fields['entry_state'])) ? $customer_address->fields['entry_state'] : $customer_address->fields['zone_name']),
								'zone_id' => $customer_address->fields['entry_zone_id'],
								'country' => array('id' => $customer_address->fields['countries_id'], 
													'title' => $customer_address->fields['countries_name'], 
													'iso_code_2' => $customer_address->fields['countries_iso_code_2'], 
													'iso_code_3' => $customer_address->fields['countries_iso_code_3']),
								'format_id' => $customer_address->fields['address_format_id'],
								'telephone' => $customer_address->fields['customers_telephone'],
								'payment_unallowed' => $customer_address->fields['payment_unallowed'],
								'shipping_unallowed' => $customer_address->fields['shipping_unallowed'],
								'email_address' => $customer_address->fields['customers_email_address']);
		
		$this->delivery = array('firstname' => $shipping_address->fields['entry_firstname'],
								'lastname' => $shipping_address->fields['entry_lastname'],
								'company' => $shipping_address->fields['entry_company'],
								'street_address' => $shipping_address->fields['entry_street_address'],
								'suburb' => $shipping_address->fields['entry_suburb'],
								'city' => $shipping_address->fields['entry_city'],
								'postcode' => $shipping_address->fields['entry_postcode'],
								'state' => ((not_null($shipping_address->fields['entry_state'])) ? $shipping_address->fields['entry_state'] : $shipping_address->fields['zone_name']),
								'zone_id' => $shipping_address->fields['entry_zone_id'],
								'country' => array('id' => $shipping_address->fields['countries_id'], 
													'title' => $shipping_address->fields['countries_name'], 
													'iso_code_2' => $shipping_address->fields['countries_iso_code_2'], 
													'iso_code_3' => $shipping_address->fields['countries_iso_code_3']),
								'country_id' => $shipping_address->fields['entry_country_id'],
								'format_id' => $shipping_address->fields['address_format_id']);
		
		$this->billing = array('firstname' => $billing_address->fields['entry_firstname'],
								'lastname' => $billing_address->fields['entry_lastname'],
								'company' => $billing_address->fields['entry_company'],
								'street_address' => $billing_address->fields['entry_street_address'],
								'suburb' => $billing_address->fields['entry_suburb'],
								'city' => $billing_address->fields['entry_city'],
								'postcode' => $billing_address->fields['entry_postcode'],
								'state' => ((not_null($billing_address->fields['entry_state'])) ? $billing_address->fields['entry_state'] : $billing_address->fields['zone_name']),
								'zone_id' => $billing_address->fields['entry_zone_id'],
								'country' => array('id' => $billing_address->fields['countries_id'], 
													'title' => $billing_address->fields['countries_name'], 
													'iso_code_2' => $billing_address->fields['countries_iso_code_2'], 
													'iso_code_3' => $billing_address->fields['countries_iso_code_3']),
								'country_id' => $billing_address->fields['entry_country_id'],
								'format_id' => $billing_address->fields['address_format_id']);
		
		$index = 0;
		$products = $_SESSION['cart']->get_products();
		
		for ($i=0, $n=sizeof($products); $i<$n; $i++) {		
			$products_price = $price->GetPrice($products[$i]['id'], false,	$products[$i]['quantity'], $products[$i]['tax_class_id'], '')+$price->format($_SESSION['cart']->attributes_price($products[$i]['id']), false, $products[$i]['tax_class_id']);
			
			$this->products[$index] = array('qty' => $products[$i]['quantity'],
											'name' => $products[$i]['name'],
											'model' => $products[$i]['model'],
											'tax_class_id'=> $products[$i]['tax_class_id'],
											'tax' => get_tax_rate($products[$i]['tax_class_id'], $tax_address->fields['entry_country_id'], $tax_address->fields['entry_zone_id']),
											'tax_description' => get_tax_description($products[$i]['tax_class_id'], $tax_address->fields['entry_country_id'], $tax_address->fields['entry_zone_id']),
											'price' =>  $products_price ,
											'final_price' => $products_price*$products[$i]['quantity'],
											'shipping_time'=>$products[$i]['shipping_time'],
											'weight' => $products[$i]['weight'],
											'id' => $products[$i]['id']);
			
			if ($products[$i]['attributes']) {
				$subindex = 0;
				reset($products[$i]['attributes']);
				while (list($option, $value) = each($products[$i]['attributes'])) {
					$attributes = $this->db->db_query("SELECT 
															popt.products_options_name, 
															poval.products_options_values_name, 
															pa.options_values_price, 
															pa.price_prefix 
														FROM 
															".TABLE_PRODUCTS_OPTIONS." popt, 
															".TABLE_PRODUCTS_OPTIONS_VALUES." poval, 
															".TABLE_PRODUCTS_ATTRIBUTES." pa 
														WHERE 
															pa.products_id = '".$products[$i]['id']."' 
														AND 
															pa.options_id = '".$option."' 
														AND 
															pa.options_id = popt.products_options_id 
														AND 
															pa.options_values_id = '".$value."' 
														AND 
															pa.options_values_id = poval.products_options_values_id 
														AND 
															popt.language_id = '".$_SESSION['languages_id']."' 
														AND 
															poval.language_id = '".$_SESSION['languages_id']."'");

					$this->products[$index]['attributes'][$subindex] = array('option' => $attributes->fields['products_options_name'],
																			'value' => $attributes->fields['products_options_values_name'],
																			'option_id' => $option,
																			'value_id' => $value,
																			'prefix' => $attributes->fields['price_prefix'],
																			'price' => $attributes->fields['options_values_price']);
					$subindex++;
				}
			}
			
			$shown_price = $this->products[$index]['final_price'];
			$this->info['subtotal'] += $shown_price;
			if($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1)
				$shown_price_tax = $shown_price-($shown_price/100 * $_SESSION['customers_status']['customers_status_ot_discount']);
			
			$products_tax = $this->products[$index]['tax'];
			$products_tax_description = $this->products[$index]['tax_description'];
			if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 1) {
				if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1) {
					$this->info['tax'] += $shown_price_tax - ($shown_price_tax / (($products_tax < 10) ? "1.0".str_replace('.', '', $products_tax) : "1.".str_replace('.', '', $products_tax)));
					$this->info['tax_groups'][TAX_ADD_TAX."$products_tax_description"] += (($shown_price_tax /(100+$products_tax)) * $products_tax);
				} else {
					$this->info['tax'] += $shown_price - ($shown_price / (($products_tax < 10) ? "1.0".str_replace('.', '', $products_tax) : "1.".str_replace('.', '', $products_tax)));
					$this->info['tax_groups'][TAX_ADD_TAX."$products_tax_description"] += (($shown_price /(100+$products_tax)) * $products_tax);
				}
			} else {
				if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1) {
					$this->info['tax'] += ($shown_price_tax/100) * ($products_tax);
					$this->info['tax_groups'][TAX_NO_TAX."$products_tax_description"] += ($shown_price_tax/100) * ($products_tax);
				} else {
					$this->info['tax'] += ($shown_price/100) * ($products_tax);
					$this->info['tax_groups'][TAX_NO_TAX."$products_tax_description"] += ($shown_price/100) * ($products_tax);
				}
			}
			$index++;
		}
		
		if ($_SESSION['customers_status']['customers_status_show_price_tax'] == '0') {
			$this->info['total'] = $this->info['subtotal']+$price->format($this->info['shipping_cost'], false, 0, true);
			if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == '1')
				$this->info['total'] -= ($this->info['subtotal'] /100 * $_SESSION['customers_status']['customers_status_ot_discount']);
			
		} else {
			$this->info['total'] = $this->info['subtotal']+$price->format($this->info['shipping_cost'], false, 0, true);
			if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1)
				$this->info['total'] -= ($this->info['subtotal'] /100 * $_SESSION['customers_status']['customers_status_ot_discount']);
		}
	}
}
?>